// 需要先注册应用，这样single-spa才知道在什么时机，如何去初始化、下载、挂载和卸载各应用。
// 我们一般情况下在single-spa的配置文件中进行注册，当然也可以有其他方式(不推荐)。
// 如果在某个应用中注册其他应用，这两个应用不会存在嵌套关系，他们还是同级关系，应用的挂载和下载也还是会依赖各自的触发条件(activity functions)。
// 我们通过调用registerApplication方法来注册应用



import {registerApplication, start} from 'single-spa';
// 参数1：name:表示应用程序的名字，name必须是string类型
// 参数2：app，指定该应用程序的入口文件registerApplication的第二个参数必须是返回promise的函数(或"async function"方法)。
// 这个函数没有入参，会在应用第一次被下载时调用。返回的Promise resolve之后的结果必须是一个可以被解析的应用。常见的实现方法是使用import加载：() => import('/path/to/application.js')
// 参数3：activeWhen： 确定哪个应用程序对于url是活动的
// 具体参数详情可以参考网

// 注册应用
registerApplication('nav', () => import('./nav/index.js'), () => location.pathname.startsWith('/'));
registerApplication('react1', () => import('./react1/index.js'), () => location.pathname.startsWith('/react1'));
registerApplication('react2', () => import('./react2/index.js'), () => location.pathname.startsWith('/react2'));

// start()方法 必须被single-spa配置文件的js调用，这时应用才会被真正挂载。在start被调用之前，应用先被下载，但不会初始化/挂载/卸载。
// start方法可以协助我们更好提升应用的性能。举个例子，我们可能会马上注册一个应用(为了立刻下载代码)，但不能马上就在DOM节点上挂载该应用，而是需要等一个AJAX请求(可能会获取用户的登录信息)完成后，再根据结果进行挂载。
// 这种情况下，最佳实践是先调用registerApplication，等AJAX请求完成后再调用start。
start()